package com.hws.leetcode.Day_12_22;

/**
 * ClassName:daily
 * Package:com.hws.leetcode.Day_12_22
 * Description: 重复叠加字符串匹配 【Middle】
 * <p>
 * 给定两个字符串 a 和 b，寻找重复叠加字符串 a 的最小次数，
 * 使得字符串 b 成为叠加后的字符串 a 的子串，如果不存在则返回 -1。
 * <p>
 * 注意：字符串 "abc" 重复叠加 0 次是 ""，重复叠加 1 次是 "abc"，
 * 重复叠加 2 次是 "abcabc"。
 * <p>
 * 输入：a = "abcd", b = "cdabcdab"
 * 输出：3
 * 解释：a 重复叠加三遍后为 "abcdabcdabcd", 此时 b 是其子串。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/repeated-string-match
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @ date:2021/12/22 15:08
 * @ author:hws
 */
public class daily {

    public int func(String a, String b) {
        boolean arrays[] = new boolean[26];
        for (int i = 0; i < a.length(); i++) {
            arrays[a.charAt(i) - 'a'] = true;
        }
        for (int i = 0; i < b.length(); i++) {
            if (!arrays[b.charAt(i) - 'a']) {
                return -1;
            }
        }
        int count = (b.length() + a.length() - 1) / a.length();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count; i++) {
            sb.append(a);
        }
        for (int i = 0; i <= 1; i++) {
            if (sb.indexOf(b) >= 0){
                return count + i;
            }
            sb.append(a);
        }
        return -1;
    }

    public static void main(String[] args) {
        daily d = new daily();
        System.out.println(d.func("abcabcabcabc", "abac"));
    }

}
